const bcrypt = require("bcrypt");
// 导入user模块
const { User } = require("../../models/user");

module.exports = async (req, res) => {
  const { email, password } = req.body;
  // 获取重定向参数
  const redirect = req.query.redirect;
  
  // 服务端验证
  if (email.trim().length == 0 || password.trim().length == 0) {
    // return res.status(400).send("<h3>邮件地址或者密码错误</h3>");
    return res
      .status(400)
      .render("admin/error", { msg: "邮件地址或者密码错误" });
  }

  // 根据邮箱地址查询用户
  let user = await User.findOne({ email });
  if (user) {
    // 将客服端传递过来的密码，和数据库中的密码进行比对
    // 使用bcrypt.compare比对密码 bcrypt.compare(明文密码， 加密密码)
    const isPass = await bcrypt.compare(password, user.password);
    if (isPass) {
      // 使用session对象存储用户信息
      req.session.username = user.username;
      // 保存role
      req.session.role = user.role;
      // res.send("登录成功");
      // 存储用户,这样就可以在模板中获取到userInfo这个对象
      req.app.locals.userInfo = user;
      // 登录成功，重定向至admin/user
      
      // 登录成功，判断重定向参数是否有值
      if(redirect && redirect !== 'undefined') {
        // 跳转至重定向页面
        res.redirect(redirect);
      } else {
        // 跳转至用户管理页面
        // res.redirect("/admin/user");

        // 判断用户角色
        if(req.app.locals.userInfo.role === 'admin') {
          // 管理员
          res.redirect("/admin/user");
        } else {
          // 普通用户
          res.redirect("/home");
        }
      }
      
    } else {
      return res
        .status(400)
        .render("admin/error", { msg: "邮件地址或者密码错误" });
    }
  } else {
    // 没用查到用户
    return res
      .status(400)
      .render("admin/error", { msg: "邮件地址或者密码错误" });
  }
};
